<template>
    <div class="zoom-wrapper">
        <button class="zoom-button" @click="scale('down')">
            <Icon type="md-remove" :size="14" color="#fff" />
        </button>
        <span class="zoom-number">{{ value }}%</span>
        <button class="zoom-button" @click="scale('up')">
            <Icon type="md-add" :size="14" color="#fff" />
        </button>
    </div>
</template>

<script>
export default {
    name: 'ZoomController',
    props: {
        value: {
            type: Number,
            default: 100
        },
        step: {
            type: Number,
            default: 20
        },
        min: {
            type: Number,
            default: 10
        },
        max: {
            type: Number,
            default: 200
        }
    },
    methods: {
        scale(type) {
            const zoom = this.value + (type === 'down' ? -this.step : this.step)
            if ((zoom < this.min && type === 'down') || (zoom > this.max && type === 'up')) {
                return
            }
            this.$emit('input', zoom)
        }
    }
}
</script>

<style lang="less">
.trans(@duration) {
    transition: ~'all @{duration} ease-in';
}
.zoom-wrapper {
    .zoom-button {
        width: 20px;
        height: 20px;
        line-height: 10px;
        border-radius: 50%;
        background: rgba(157, 162, 172, 1);
        box-shadow: 0px 2px 8px 0px rgba(218, 220, 223, 0.7);
        border: none;
        cursor: pointer;
        outline: none;
        &:active {
            box-shadow: 0px 0px 2px 2px rgba(218, 220, 223, 0.2) inset;
        }
        .trans(0.1s);
        &:hover {
            background: #1890ff;
            .trans(0.1s);
        }
    }
    .zoom-number {
        color: #657180;
        padding: 0 8px;
        display: inline-block;
        width: 46px;
        text-align: center;
    }
}
</style>
